4.6-RELEASE の項目は濃い内容になったなぁ;-)。しかし、4.7-RELEASE がもう目の前に来ているのでこれが多分最後の項目になるでしょう;-)。
と、言う事で、 2002/10/3 位に XCAST6 の CVS サーバに FreeBSD-4.6.2-RELEASE 対応版の XCAST6 のパッチなど一式が置かれました。さささ、いよいよ FreeBSD の世界にも XCAST6 が到来です。実際に楽しんでみましょう;-)
そもそも XCAST6 って何?
先にお断りです(^^;;。僕の知っている範囲で書きます。もしかしたらウソも書いているかもしれませんがその時にはご容赦ください(これが雑誌ではない、web の利点でもあります;-)。フツー、IPv4 の世界ではダバダバと垂れ流すマルチキャストと言うのがあります。同一ネットワーク内だったらブロードキャストと変わらないのですが、 FreeBSD 上で mrouted を立ち上げる事により隣のネットワークへも流すことが可能です。これを連携させたネットワークが、MBone と言う事になりますね。
で、実際問題として、Multicast すると、線の太さは必要だし、途中のルータとかがあっぷあっぷしてしまうので大変です。IGMP とかでグループを管理してとかなどなど・・。大丈夫なんでしょうか?(^^;;。と、言う事で XCAST の出番です。 XCAST は xplicit Multicast の略で、それを IPv6 対応にしたのが、XCAST6 と言う事になります。では IPv4 対応の XCAST っちゅーのはあるのか?と言われれば私は知りません(^^;;。
仕掛けはいたって簡単です。例えば会議をしたい人が XCAST6 を利用する時、会議に参加している人全ての IPv6 アドレスをパケットの中に格納してあげ、それでパケットの伝達を行います。んーー。全然マルチキャストでは無いですね。これを人は「なんちゃってマルチキャスト」と呼んだりしています;-)。データは不特定多数の人には配信できません。管理サーバに接続した大体 16 名位の人にしか同時に配信されません。
現状ではどんなアプリケーションが使えるの?
一番簡単なのは NetBSD な皆さんがやっている vic/rat を利用した画像と音声を飛ばす電子会議です。他にはあまり見かけません。僕が勝手に思っているのは、例えば mp3 とか mpeg 動画を配信しても面白いのになぁ。と言う事ですが・・;-)。 IPv4 対応のマルチキャストサーバとクライアントは沢山あるけど XCAST6 対応の mp3/divx などの CODEC を積んだサーバが出てきて欲しいモノです;-)。
FreeBSD で試してみよう
と、言う事で前フリはおしまい。ここからは実際に FreeBSD で試してみることにしましょう。まず、は XCAST6 なサイトに行って情報を仕入れてきます。
http://sourceforge.net/project/showfiles.php?group_id=30760&release_id=85926
の辺りですね。そして、
http://unc.dl.sourceforge.net/sourceforge/xcast6/xcast6-0.1.2-README.txt
などを眺めておもむろに環境を構築することにしましょう;-)。と、言うか、インストール方法はこのファイルを見ながらやるとあっと言う間に終わってしまうので是非共参考にしてみてください。
----------------
# gunzip xcast6-0.1.2-freebsd-sys-4.6.2.diff.gz
# cd /usr/src/sys
# cat ~/xcast6-0.1.2-freebsd-sys-4.6.2.diff | patch -p2
# cd /usr/src/sys/i386/conf
# vi KERN_CONFIG
# ....
# ....
# ....
# cp /usr/src/sys/netinet6/{xcast6.h,in6.h} /usr/include/netinet6
----------------
まずはカーネルにパッチを当てます。xcast6-0.1.2-freebsd-sys-4.6.2.diff.gz と言うのを取ってきます。続いてカーネルの config ファイルに以下の二行を追加します。その後にはいつもの様に config KERN_CONFIG してから make depend;make;make install してカーネルの構築はおしまいです。カーネルができたら二つの include ファイルをコピーしといてあげましょう。
----------------
options XCAST6
pseudo-device xcst 1 # XCAST6
----------------
一旦リブートした後には、ifconfig で見ると、xcst0 なるネットワークインターフェースができています。すごいですね;-)。最初は down しているのでこれを使える状態にして上げる必要があります。以下のスクリプトを /usr/local/etc/rc.d/xcast6.sh などとしておいとけば良いですね。
----------------
#! /bin/sh
xcstif=xcst0
xcast6rt=ff05::10
ifconfig $xcstif up
linklocal=`ifconfig $xcstif | grep inet6 | grep 'inet6 fe80' | head -1 | awk '{print $2}'`
route add -host -inet6 $xcast6rt $linklocal
----------------
次ぎに XCAST6 に必要なライブラリをインストールします。 xcast6-0.1.2-lib.tar.gz を利用します。 make した後で libxcast.h と言う include ファイルをコピーするのを忘れない様に。
----------------
# tar xvzfp xcast6-0.1.2-lib.tar.gz
# cd xcast6-lib/libxcast
# make;make install
# cp libxcast.h /usr/include
----------------
後は、必要であれば、xcast6-0.1.2-sbin.tar.gz、xcast6-0.1.2-usr.sbin.tar.gz、xcast6-0.1.2-tcpdump-3.7.1.diff.gz などもインストールしておきましょう。
これで FreeBSD のシステム部分の準備は整いました。比較的簡単に XCAST6 Ready な FreeBSD になったかと思います;-)。
アプリケーションを利用してみる
と、言う事で、実際に使ってみたいと思いますが、現状では vic と rat くらいしか有りません。それらについて見ていきましょう。
まずはカメラ用のプログラムである vic ですが、以前に書いたものは XCAST6 では動作検証を取っていません。ただ単に FreeBSD で ov511 な USB カメラを使うためにまとめた文章です。なのであんまり参考にはしないでください。
xcast6-0.1.2-tcpdump-3.7.1.diff.gz と言うパッチを持ってきて自分で作成しても問題はありません。もしくは私が、 vic-2.8ucl-1.1.3_FreeBSD_20021003.tar.gz を用意したのでそちらを利用してください。インストール方法は ov511 な USB カメラを使う で書いたときと一緒です。 vic 自前の tcl/tk は使っていません。
音声を飛ばすプログラムとしては rat と言うのがありますが xcast6-0.1.2-rat-4.2.22.diff.gz と言うパッチを利用して自力で make してください;-)。こっちについては、私はパッチを作ってないです。;-P
さてと、準備が整った所で最後に管理サーバをインストールしましょう。 xcast6-0.1.2-xcgroup.tar.gz が必要になります。以下の要領で準備が整います。簡単ですね。
----------------
% tar xvzfp xcast6-0.1.2-xcgroup.tar.gz
% cd xcgroup
% configure --enable-ipv6
% make
# make install
----------------
で、xcgroup はグループ管理サーバ機能とクライアント機能の二つを持っています。まずクライアント側としての利用についてですが、簡単に言うと、人が用意した管理サーバに対して以下のコマンドを利用して接続します。
----------------
% xcgroup -b http://xcast6.running-dog.net/cgi-bin/xcgroupsrv.cgi -g FreeBSD
----------------
xcgroup は http プロトコルを利用して管理サーバに登録する。と、言う事ですね。参加するグループは -g オプションで指定します。今回は FreeBSD と言うグループに参加する事にしました。これで vic/rat の相手方ができた事になります。ふふふ。と、言う事で、 xcgroup がエラーになる場合があれます。IPv4 のマルチキャストアドレスが設定していないのが原因です。IPv6 使うのにどうして IPv4 の設定が必要なんだ?と言う声が聞こえてきますが、以下のコマンドは必須となるので合せて叩いておきましょう。
----------------
# route add 224.0.0.1 -ifp lo0
----------------
さてと、グループ管理サーバですが、CGI 経由で join して来た人の情報は /usr/local/share/xcgroup と言うディレクトリ内にグループ名の付いたテキストファイルを生成します。上記の例だと、 /usr/local/share/xcgroup/FreeBSD.txt が新規に生成されます。新しくできたファイルの持ち主は httpd の owner と言う事になるので /usr/local/share/xcgroup を適切なパーミッションにしてください;-)。
と、言う様な事をすると、アクセスして来た人が勝手にゴミのグループファイルを作っていってしまう可能性があるので注意しましょう;-)。実際には以下の要領で、root で準備するのが良いでしょう。
----------------
# cd /usr/local/share/xcgroup
# chmod 755 /usr/local/share/xcgroup
# cp /dev/null /usr/local/share/xcgroup/FreeBSD.txt
# chmod 644 /usr/local/share/xcgroup/FreeBSD.txt
# chown www:www /usr/local/share/xcgroup/FreeBSD.txt
----------------
こうすると、勝手にグループを作成される事はありません;-)。グループファイルを作成する時には root で作業を行い、勝手にグループを作られない様にしましょう。2ch みたいにバババと動的に(スレッドを立てたい)グループを作っても良いと言う人は広大なディスクスペースを用意しましょう;-P。
所で、FreeBSD.txt と言うファイル。中を覗いてみると、ふむふむ。IPv6 アドレスが載っていますね。あれれ? 上の方で、XCAST6 の原理としては、パケットの中に IPv6 アドレスを突っ込んで送る。と、言いましたが、IPv6 アドレスはこのファイルに羅列されている・・。と、言う事は・・・。うぅぅみゅ。XCAST6 って言うのは、プロトコルのインプリ以外の部分の原理は非常簡単?と言う事になってきそうですね;-)。
では、自分が管理サーバを立ち上げるにはどうしたら良いか?と言う事ですが、上記で -b の 後に URL を指定したと言う事は、httpd と xcgroupsrv.cgi を用意して上げれば良い。と言う事になります。あー簡単;-)。xcgroupsrv.cgi は xcgroup/server/xcgroupsrv.cgi にあるので httpd の CGI が動くディレクトリにコピーしてあげましょう。あ、xcgroupsrv.cgi は ruby で書かれているので自分のマシンに無い場合にはインストールして上げましょう。
グループ管理サーバに接続されている人を見る方法は以下の様に web ブラウザで確認する事が可能です。すると、IPv6 アドレスの一覧が表示されたと思います。めでたしめでたし;-)。
----------------
% http://xcast6.running-dog.net/cgi-bin/xcgroupsrv.cgi?cmd=show&group=FreeBSD
----------------
これで会議するための準備が整ったので vic を起動してみましょう。-t で hop 数を指定します。デェフォルトは 16 ですが、人が多くなると自分のカメラの情報が届かなくなるので、ま、64 位が丁度良いでしょうか。自分の動画が合計で 64hop 先まで届く。と、言う意味です。
-n オプションでプロトコルを指定します。XCAST6 を利用する場合には -n xcast6 と指定します。最後に ::1/20000 と、ホスト名/ポート番号を指定します。ホスト名は ::1 で良いでしょう。port 番号は皆と同じ port を利用する事にしましょう。
----------------
% vic -t 64 -n xcast6 ::1/20000
----------------
これで後は ov511 な USB カメラを使う にある様な感じで利用してみましょう。メーニューの [Transmit] ボタンを押すと動画が流れ出します。また、[Device...] でカメラを指定しましょう。後、帯域制御は [Rate Cntrol]をスライドする事により可能です。画像の目を綺麗にするかしないかは [Quality] で制御できます。右に行けば行くほど綺麗になります。
rat の場合は以下の様に起動します。ホスト名とポート番号の指定方法は vic の時と一緒です。
----------------
% rat ::1/30000
----------------
左のレベルメータは聞く方のメータで、右側のメータが喋るためのメータです。デバイスの指定がいろいろできるので、例えばマイクを使うとか、CD を流すとかも可能です。 [Options...] を押すと画面が出てきます。以下の項目を設定してあげましょう。基本的には僕の環境での画面です。
[Transmission] メニューでは [Encoding] に [Linear-16] を指定しましょう。
[Reception] メニューでは [Playout Delay] 、 [Lecture Mode] 、 [3D Audio Rendering] にチェック付けておくと音が綺麗になるかもしれません。
[Cedecs] メニューでは一番上の [L16-8K-Mono] が良いかも知れません。
ま、どっちにしてもお話するメンバ内で取り決めて、それに合せて皆で利用するとうまく行く事でしょう。
と、言う事で準備が完了して、XCAST6 でミーティングが出来る様になったかと思います。後は仲間を集めて夜通しお話をしてみてはいかがでしょうか。
それにしても、vic には DivX な Codec が、rat には mp3 な Codec が組み込まれると非常に嬉しいのですがね。ま、もう少し待ってみましょう;-)。
と、言う事で、今まで NetBSD でのみサポートされていた XCAST6 ですが、いよいよ FreeBSD でも動き出すようになって来ました。関連するソースを覗いてみたりすると Win32 のコードが既に入っている部分もあったりします。と、言う事でバババと広がるのももうすぐでしょうか;-)。
まずはご近所で仲間を見つけて遊んでみてください;-)。尚、梅本さん が 5-CURRENT に移植してくださいました。後、4.7-RC でも動かしていました。嬉しい事ですね。有り難うございます。
尚、文中(特に上の方)に不備や間違いなど有りましたら指摘して頂けると嬉しいです;-)。お手数をおかけします。